{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "5QoWip9KktQ0"
      },
      "outputs": [],
      "source": [
        "\"\"\"Licensed under the Apache License, Version 2.0.\"\"\"\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "from IPython import display\n",
        "import pandas as pd\n",
        "\n",
        "# Library of analysis code common to experiments.\n",
        "import protseq_analysis"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "4R2pw6yLFgbc"
      },
      "outputs": [],
      "source": [
        "# Download the dataset from:\n",
        "# Jess, Phillip (2021), “ProtSeq Data”, Mendeley Data, V1, doi: 10.17632/f9hdn5xc3v.1\n",
        "# https://data.mendeley.com/datasets/f9hdn5xc3v/1\n",
        "\n",
        "!wget https://data.mendeley.com/public-files/datasets/f9hdn5xc3v/files/882faf53-004e-4d44-b3b7-93ae8d6e82ba/file_downloaded -O \"Single cycle DNA_DNA BCS Base calls.fastq.gz\"\n",
        "!wget https://data.mendeley.com/public-files/datasets/f9hdn5xc3v/files/8e9f2979-e85a-48af-9876-c3dc93602551/file_downloaded -O \"Single cycle DNA_DNA BCS undetermined calls.fastq.gz\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "1nyn2171wDJ8"
      },
      "outputs": [],
      "source": [
        "\n",
        "expt_dict = {\n",
        "    'base': ['Single cycle DNA_DNA BCS Base calls.fastq.gz'],\n",
        "    'undertermined': ['Single cycle DNA_DNA BCS undetermined calls.fastq.gz'],\n",
        "}\n",
        "\n",
        "component_names_str = '''\n",
        "5Phos.O1_BCS4_Fd7\tATCAAGGC\n",
        "5Phos.O1_BCS4_Fd8\tCTAGTACG\n",
        "5Phos.O1_BCS4_Fd11\tTGCGTACA\n",
        "5Phos.O1_BCS4_Fd12\tTGCAAACG\n",
        "SP9.T25_BCS4_Fd13\tCGGAAAGA\n",
        "SP9.T25_BCS4_Fd14\tGTGAGCAA\n",
        "SP9.T25_BCS4_Fd15\tCGTAACTC\n",
        "SP9.T25_BCS4_Fd16\tCTATATCA\n",
        "SP6.O1_BCS4_Fd17\tTCTAAGGT\n",
        "SP6.O1_BCS4_Fd18\tAAGCAACT\n",
        "SP6.O1_BCS4_Fd19\tTGGTACCT\n",
        "SP6.O1_BCS4_Fd20\tCGTAAGTG\n",
        "AV.B4.U2.SA1.2\tTGCTTGCCTGGT\n",
        "AV.B4.U2.SA1.3\tCTTGTATCTAGG\n",
        "AV.B4.U2.SA2.3\tAATGCCGAAGGT\n",
        "AV.B4.U2.SA4.2\tACGTCGCCAATT\n",
        "'''\n",
        "\n",
        "subseqs, component_dict, _ = protseq_analysis.get_subseqs_from_component_names(component_names_str)\n",
        "foundation_dict = protseq_analysis.get_foundation_dict(component_dict)\n",
        "full_df = protseq_analysis.read_fastqs_for_experiment(expt_dict, num_reads=100000000, subseqs=subseqs, n_common=50000000, dist_for_clustering=0)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "zMZoaQG1A2Bv"
      },
      "outputs": [],
      "source": [
        "cycle_dfs, cycle_correspondence = protseq_analysis.foundation_partner_cycle_table(full_df, foundation_dict,\n",
        "                                                                          component_dict, cycles_to_check=1, heatmap=False,\n",
        "                                                                          allow_overlaps=False)\n",
        "first_cycle_df = cycle_dfs[1]\n",
        "first_cycle_df['binder'] = ['SP4.1 (Neg. Ctrl)', 'SP4.2 (Neg. Ctrl)', 'SP6', 'SP9']\n",
        "plot_df = protseq_analysis.make_plot_df(first_cycle_df)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "height": 235
        },
        "executionInfo": {
          "elapsed": 113,
          "status": "ok",
          "timestamp": 1631830890725,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "91TQ8lpgsr8m",
        "outputId": "a98f19cf-1dce-4a0b-bba7-5e9c83936815"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\u003cdiv\u003e\n",
              "\u003cstyle scoped\u003e\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead tr th {\n",
              "        text-align: left;\n",
              "    }\n",
              "\n",
              "    .dataframe thead tr:last-of-type th {\n",
              "        text-align: right;\n",
              "    }\n",
              "\u003c/style\u003e\n",
              "\u003ctable border=\"1\" class=\"dataframe\"\u003e\n",
              "  \u003cthead\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eBinder Target\u003c/th\u003e\n",
              "      \u003cth colspan=\"4\" halign=\"left\"\u003e5Phos\u003c/th\u003e\n",
              "      \u003cth\u003eEmpty\u003c/th\u003e\n",
              "      \u003cth colspan=\"4\" halign=\"left\"\u003eSP6\u003c/th\u003e\n",
              "      \u003cth colspan=\"4\" halign=\"left\"\u003eSP9\u003c/th\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eTarget Foundation\u003c/th\u003e\n",
              "      \u003cth\u003eFd11\u003c/th\u003e\n",
              "      \u003cth\u003eFd12\u003c/th\u003e\n",
              "      \u003cth\u003eFd7\u003c/th\u003e\n",
              "      \u003cth\u003eFd8\u003c/th\u003e\n",
              "      \u003cth\u003eEmpty\u003c/th\u003e\n",
              "      \u003cth\u003eFd17\u003c/th\u003e\n",
              "      \u003cth\u003eFd18\u003c/th\u003e\n",
              "      \u003cth\u003eFd19\u003c/th\u003e\n",
              "      \u003cth\u003eFd20\u003c/th\u003e\n",
              "      \u003cth\u003eFd13\u003c/th\u003e\n",
              "      \u003cth\u003eFd14\u003c/th\u003e\n",
              "      \u003cth\u003eFd15\u003c/th\u003e\n",
              "      \u003cth\u003eFd16\u003c/th\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eBinder for\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "    \u003c/tr\u003e\n",
              "  \u003c/thead\u003e\n",
              "  \u003ctbody\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eSP4.1 (Neg. Ctrl)\u003c/th\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eSP4.2 (Neg. Ctrl)\u003c/th\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e2\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eSP6\u003c/th\u003e\n",
              "      \u003ctd\u003e117\u003c/td\u003e\n",
              "      \u003ctd\u003e84\u003c/td\u003e\n",
              "      \u003ctd\u003e935\u003c/td\u003e\n",
              "      \u003ctd\u003e76\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e19140\u003c/td\u003e\n",
              "      \u003ctd\u003e11383\u003c/td\u003e\n",
              "      \u003ctd\u003e29377\u003c/td\u003e\n",
              "      \u003ctd\u003e18751\u003c/td\u003e\n",
              "      \u003ctd\u003e83\u003c/td\u003e\n",
              "      \u003ctd\u003e100\u003c/td\u003e\n",
              "      \u003ctd\u003e54\u003c/td\u003e\n",
              "      \u003ctd\u003e21\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003eSP9\u003c/th\u003e\n",
              "      \u003ctd\u003e205\u003c/td\u003e\n",
              "      \u003ctd\u003e152\u003c/td\u003e\n",
              "      \u003ctd\u003e1768\u003c/td\u003e\n",
              "      \u003ctd\u003e191\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e277\u003c/td\u003e\n",
              "      \u003ctd\u003e135\u003c/td\u003e\n",
              "      \u003ctd\u003e375\u003c/td\u003e\n",
              "      \u003ctd\u003e252\u003c/td\u003e\n",
              "      \u003ctd\u003e28256\u003c/td\u003e\n",
              "      \u003ctd\u003e62962\u003c/td\u003e\n",
              "      \u003ctd\u003e11395\u003c/td\u003e\n",
              "      \u003ctd\u003e6234\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "  \u003c/tbody\u003e\n",
              "\u003c/table\u003e\n",
              "\u003c/div\u003e"
            ],
            "text/plain": [
              "Binder Target     5Phos                 Empty  ...    SP6    SP9                    \n",
              "Target Foundation  Fd11 Fd12   Fd7  Fd8 Empty  ...   Fd20   Fd13   Fd14   Fd15  Fd16\n",
              "Binder for                                     ...                                  \n",
              "SP4.1 (Neg. Ctrl)     0    0     0    0     0  ...      1      0      1      0     1\n",
              "SP4.2 (Neg. Ctrl)     0    0     2    0     0  ...      0      1      1      0     0\n",
              "SP6                 117   84   935   76     0  ...  18751     83    100     54    21\n",
              "SP9                 205  152  1768  191     0  ...    252  28256  62962  11395  6234\n",
              "\n",
              "[4 rows x 13 columns]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "def get_foundation(s):\n",
        "  if s == 'Empty_Foundation':\n",
        "    return 'Empty'\n",
        "  else:\n",
        "    return s.split('_')[-1]\n",
        "\n",
        "def pivot_plot_df(plot_df):\n",
        "  df = plot_df.copy()\n",
        "  df['Target Foundation'] = df['target'].map(get_foundation)\n",
        "  return pd.pivot(df, columns=['Binder Target', 'Target Foundation'], values='Count', index='Binder for').astype(int)\n",
        "\n",
        "plot_df_pivoted = pivot_plot_df(plot_df)\n",
        "with pd.option_context(\"display.max_rows\", 1000):\n",
        "  display.display(plot_df_pivoted)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "height": 410
        },
        "executionInfo": {
          "elapsed": 927,
          "status": "ok",
          "timestamp": 1631740050877,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "5sjHHvNWaNpe",
        "outputId": "b34ec4fa-4110-408a-c6af-1d039999fea5"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABs0AAAGJCAYAAADBt33kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsT\nAAALEwEAmpwYAABQGklEQVR4nO3de7xXVZ0//tc6oICCeAEUFW8pCiqiHm9pitmYpZlTOTrTJN1+\nNllO9S2aLlNj02UqbbrOODld1LJRUzO17GJeSsQLGF5SUUwUEgVBFASEA+v3Bx8I5ICIHj7A5/l8\nPM7jfPbae6393gd08/m8ztqr1FoDAAAAAAAArayt2QUAAAAAAABAswnNAAAAAAAAaHlCMwAAAAAA\nAFqe0AwAAAAAAICWJzQDAAAAAACg5QnNAAAAAAAAaHndm13AutavX7+6yy67NLsMAAAAAAAA1rFx\n48Y9VWvt39m+lgvNdtlll4wdO7bZZQAAAAAAALCOlVIeXdU+j2cEAAAAAACg5QnNAAAAAAAAaHlC\nMwAAAAAAAFpey61p1pmFCxdmypQpmT9/frNL4RXUs2fP7Ljjjtlkk02aXQoAAAAAALCeE5olmTJl\nSvr06ZNddtklpZRml8MroNaaGTNmZMqUKdl1112bXQ4AAAAAALCe83jGJPPnz88222wjMNuIlFKy\nzTbbmD0IAAAAAACsEaFZg8Bs4+PPFAAAAAAAWFNCs/VQt27dMnz48Oy333454IADcssttyRJHn/8\n8bztbW97SWOdf/75+eAHP/iy6hk1alT23nvvjBo16mWNAwAAAAAAsL6yptl6qFevXhk/fnyS5Ne/\n/nU++clP5qabbsr222+fyy67rEvP3dHRke7dV/xr8d3vfjfTp09Pjx491noMAAAAAACA9ZmZZuu5\nZ599NltttVWSZNKkSdlnn32SLJlB9pa3vCXHHXdc9thjj3z84x9f1ueHP/xhBg8enKOOOiqjR49e\n1j59+vS89a1vzUEHHZSDDjpo2b6zzjorp59+eo499ticdtppK5z/xBNPzHPPPZdDDjkkl1xySR59\n9NEcc8wxGTZsWI455pg89thjSZJ3vvOd+X//7//l6KOPzr/8y7906c8EAAAAAADglWY60Hpo3rx5\nGT58eObPn5+pU6fm+uuv7/S48ePH549//GN69OiRPffcM2eeeWa6d++ef/u3f8u4cePSt2/fHH30\n0dl///2TJB/60IfykY98JEcccUQee+yxvP71r8/999+fJBk3blxuvvnm9OrVa4VzXHXVVendu/ey\nmW9vetObctppp2XkyJH5wQ9+kH/+53/OlVdemSR58MEHc91116Vbt25d84MBAAAAAIAWMemZSfny\nHV/OxKcn5ogdjsjHD/p4Nttks2aXtVETmq2Hln8845gxY3Laaafl3nvvXem4Y445Jn379k2SDB06\nNI8++mieeuqpjBgxIv3790+SnHLKKXnwwQeTJNddd13uu+++Zf2fffbZzJ49O8mSGWUvDMw6M2bM\nmFxxxRVJkne84x0rzHA7+eSTBWYAAAAAAPAK+PANH87DzzycJLn8ocvTva17/vXQf21yVRs3odl6\n7rDDDstTTz2V6dOnr7Rv+TXGunXrlo6OjiRJKaXTsRYvXpwxY8Z0Go5tvvnma1Xf8uda2zEAAAAA\nAIC/evK5J5cFZkuNeXxMk6ppHdY0W8898MADWbRoUbbZZps1Ov6QQw7JjTfemBkzZmThwoX56U9/\numzfsccem+985zvLtpfOZnspXv3qV+fiiy9Oklx00UU54ogjXvIYAAAAAADAqm3Ta5v079V/hbY9\nt96zSdW0DjPN1kNL1zRLklprLrjggjV+7OHAgQNz1lln5bDDDsvAgQNzwAEHZNGiRUmSb33rW/nA\nBz6QYcOGpaOjI0ceeWT+53/+5yXV9q1vfSvvfve7c/bZZ6d///754Q9/+JL6AwAAAAAAq9e9rXu+\n9Jov5TOjP5Mnnnsiw/oNy8cP+viLd+RlKbXWZtewTrW3t9exY8eu0Hb//fdnyJAhTaqIruTPFgAA\nAACADdXiujizF8xO3x59m13KRqOUMq7W2t7ZPo9nBAAAAAAAWA+1lTaB2TokNAMAAAAAAKDlCc0A\nAAAAAABoeUIzAAAAAAAAWp7QDAAAAAAAgJYnNAMAAAAAAKDlCc3WE1/84hez9957Z9iwYRk+fHhu\nu+22JMmIESOy5557Zr/99svhhx+eCRMmrNDvzDPPTO/evVc57nHHHZctt9wyJ5xwwmrP/+EPfzi/\n//3vl52zvb192b6xY8dmxIgRa3llq3fttdemvb09Q4YMyV577ZWPfexjSZIrr7wy99133yr7nXXW\nWTnnnHOSJB/72Mdy/fXXd0l9AAAAAABAa+jS0KyUsmUp5bJSygOllPtLKYeVUrYupfy2lPJQ4/tW\n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\nxtl5550zY8aMPPHEE6s9HwAAAAAAwKoIzV6Cnz35dH4/c07mLl68QvvcxYtz08w5uXLarLUa99hj\nj83kyZMzePDgnHHGGbnppps6Pe7qq6/OvvvumyT5zne+kxNPPDEDBw5co3PcfvvtWbBgQV71qlet\ntG/06NE58MADV2g77LDD0qNHj9xwww0rtH//+99P3759c8cdd+SOO+7I//7v/+aRRx7JFVdckUmT\nJuWee+7J9773vYwZM+ZFa7r33ntXOm+SvPrVr86JJ56Ys88+O+PHj19W86xZs3LTTTflox/96Ep9\nDjjggIwePfpFzwkAAAAAANAZodlL8N0p01cKzJaau3hxvjt52lqN27t374wbNy7nnXde+vfvn1NO\nOSXnn3/+sv1vf/vbM3z48IwePTrnnHNOHn/88fz0pz/NmWeeuUbjT506Ne94xzvywx/+MG1tK/+R\nT506Nf3791+p/V//9V9Xmm32m9/8JhdeeGGGDx+eQw45JDNmzMhDDz2Um2++OSeffHLa2tqy3Xbb\n5eijj35pP4Q1cMopp6xy34ABA/L444+/4ucEAAAAAABag9DsJXh8/sKXtX91unXrlhEjRuRzn/tc\nvvOd7+Tyyy9ftu+iiy7K+PHjc+WVV2bQoEH54x//mIkTJ2b33XfPLrvskrlz52b33XfvdNxnn302\nxx9/fL7whS/k0EMP7fSYXr16Zf78+Su1v/a1r838+fNz6623Lmurtebb3/52xo8fn/Hjx+eRRx7J\nsccem7oWj6bce++9M27cuDU+fvPNN1/lvvnz56dXr14vuQYAAAAAAIBEaPaSbN9zk5e1f1UmTJiQ\nhx56aNn2+PHjs/POO6/y+OOPPz5PPPFEJk2alEmTJmWzzTZbttbZ8hYsWJC//du/zWmnnZaTTz55\nleMNGTKk0/5J8ulPf3qFddNe//rX59xzz83ChUsCwgcffDDPPfdcjjjiiFx++eVZvHhxnnzyydx4\n440vdtkZNWpUvvSlL+XBBx9MsmRdtP/8z/9MkvTp0yezZ89+0TGWevDBB7PPPvus8fEAAAAAAADL\nE5q9BO/bsX826+TxhkmyWVtb3jdowFqNO2fOnIwcOTJDhw7NsGHDct999+Wss85aq7HGjh2b9773\nvUmSSy+9NL///e9z/vnnZ/jw4Rk+fHjGjx+/Up/jjz9+lSHXG9/4xhUe3fje9743Q4cOzQEHHJB9\n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\nAAAAoOUJzQAAAAAAAGh5QjMAAAAAAABantAMAAAAAACAlic0AwAAAAAAoOUJzQAAAAAAAGh5QjMA\nAAAAAABantAMAAAAAACAlte92QUAsP66+S835/IHL0+fTfvknXu/M7ttuVuzSwIAAAAA6BJCMwA6\nNfaJsTnjujNSU5MkN0y+Ib98yy/TZ9M+Ta4MAAAAAOCV5/GMAHTq2keuXRaYJcms52dl9F9GN7Ei\nAAAAAICuIzQDoFMDNhuwUtu2m2/bhEoAAAAAALqe0AzYoNz7+7/kirPH5Vfn3ZsZj89pdjkbtVP3\nOjV7brXnsu0TX3Vi9h+wfxMrAgAAAADoOtY0AzYYD9w6NTf9ZMKy7akTZ+UdXzws3Tfp1sSqNl59\ne/TNpW+6NPc8dU/6bNInu225W7NLAgAAAADoMmaaARuMP/9x+grbc59dkCcefqZJ1bSGttKW/frv\nJzADAAB4EXMXzs1jzz7W7DIAgJfBTDNgg9G3f68VtktJtujXaxVH81I9t/C5jJ82Prv13S0Dew9c\n1v7M889kk7ZNstkmmyVJaq25/YnbM2fhnBy+/eHp2b1ns0oGAAB4xdw69dbcNPmm7Np315y0+0nZ\ntNumSZJFixelrbSllJIkeXjWw/nRfT/K/EXz83eD/y4HbHtAfj7x5/nSbV/K3I65GbzV4PzXMf+V\n7TbfrpmXAwCshVJrbXYNL0sp5bgk30zSLcn3aq1fXt3x7e3tdezYseuktg3RbX+ekclPz8tRg/un\nf58eSZKHp8/JuElPZ/hOW2bwtn2SJE8/tyA3TJiW7bbomcNetU1KKXm+Y1FueGB6Ftea1+41ID1b\n/JF58xYtzm9mPJNuKfmbflukR1tbaq0ZPWtOpj6/MMdss0W23mRJbv3Ac/Ny57Nzc3DfzbP7ZksC\niOkLFub6GbOzU69Nc9iWvZt5KeuNebMX5Opv35Xpj81OW7eS3Q8ckLnPLkj3TbvlgGN3ysDdt8zT\nTzyXcdc+mnlzFmSvwwZmj/ZtM+vJubnxJxPy1OTZ2XGvrTLiH/ZKz96bNPty1it3Tb8r7//t+zN7\n4ey0lbb8y0H/krcNfls++YdP5reP/jY9uvXI+/Z7X969z7vz/uven1sevyVJskPvHfLjN/44/Xr1\na/IVAAC8Mm7984xMnjk3I/Yc4D3RyzRv0eL8dsaz6VaS122zdu+Jfjfj2ezUs0devZX3RHStqx++\nOp+6+VPLtl+30+tyzlHn5D9u/4/87KGfZfNNNs+ZB5yZY3Y6Jif87ITMXjA7SdK9dM/3jv1e3v+7\n92dex7xl/U981Yn54hFfXOfXwYZv5nMLcsMD07Jd35559YvcXzr7HG/itDkZ9+jMDB+0Vfbcrk8z\nL2W9cP+cefnjs3NzUN/Ns8fmq/7Mbd6ixbluuXvWpo171s1Pz8nUBQtzzNZbZJtNzT95oUULF+ee\nm6Zk+uTZ2XHPrbPXYdullJIZf5mTSfc8lS0HbJZdh/dPW1vJn/84PffcNCXdN+2WA4/bOdvt1jeP\nP/R0bv35nzN/zsIMefX22f/YnZp9SbSIUsq4Wmt7Z/s26P/SSyndkvxXkr9JMiXJHaWUq2qt9zW3\nsg3TJy6/OxffMTlJsvmm3fJ/px+aidPm5GM/vSuLG9nqF07aJwfvunXedu4teXZ+R5LkTfttn6++\ndVjecu4tuX/qs0mS3fpvnis/cHi26NmawcQzCzvyxnEP5eF5zydJhm7eM1cfuEc++sDkXDltVpKk\nb/du+fkBu+e2Wc/lXx6ckmTJ81K/OWSn7LFZz7x1/MQ8t2hxkuTtA7fO1/Zy0+jVZ9P83acOytNP\nPJdnps3LL869O2n83Zxy/8z83b8enJ997c7Mm70wSfLYn2am+6bdcvvVf85Tk+ckSR6+c3ra2kqO\nfe8+zbqM9dK37/x2Zi9c8qZvcV2cb975zSxYtCC/efQ3SZL5i+bnm3d+M3037bssMEuSv8z5Sy6d\ncGnOGH5GU+qmdT02Y24+dtldufPRp3PAzlvlnLftl5222azZZW2wHp33fD50/2MZ++xzad9i83xz\nyE7ZuVePZpe1wXpm+rxcf+H9eeLhZ7Ldq/rmtacNWWm2NGtm8uzJ+czoz+SuaXdlvwH75fOHfz6D\n+gxqdllsxP7lsrtzyVjviV4Jz3YsyhvHPZiJc//6nuiaAwfn/z3wmPdErJcufuDiFbave+y6XHjf\nhblkwiVJkgXPL8jnx3w+T89/ellgliQdtSNXPnzlCoFZkkx6ZlKX18zGZ8ITs3Py//z1/nLCsIE5\n+237dXp/+dIv7u/0c7yP/vSuLJ0j8fmT9sk7Dt25KdeyPjj/L0/lE437S0nyrVXcX/5t9x1WuGft\n3btnrj5gcD7ywGP5+XL3rCv33z1Devt3/fKu//H9efC2J5MkD972ZOY8PT/9d+qTX557T2rjH097\nHrpdhh6+fa49756/fo73wMy87V/ac/V37k7H84uSJLdcMTGb9d00ex5ili7NtaGvaXZwkom11j/X\nWhckuTjJm5tc0wZp8sy5y260SfLcgkX5n5sezn/+9sFlbw6T5Ou/fTDn/f7Py27eSXL1XY/n+zf/\nednNO0n+PP25XPnHv6yT2tdHlz359LLALEnue25+zps8fdmbwyR5pmNRzn1ser7yyNRlbYuTfPWR\nJ/Ltx55cdvNOkp9MnZnHlhuv1W213eb5y4NPL7vRJknHwsW554bJywKzpSbcOnVZYLbUXx6ctQ6q\n3LA8Ne+pFbbndszNAzMfWOm4ibMmrtT27IJnV2qDrvaxy+7K7Y/MTMfimtsfmZmPXXZXs0vaoH3o\n/sdy6zPPpaMmtz7zXD50v7U4Xo7rL7w/jz80K4sX1zz+0Kxcf+H9zS5pg/WZ0Z/JuCfHpaN2ZNyT\n4/KZ0Z9pdklsxCbPnLssMEu8J3q5fvrEzGUfPiZL3hN9d/I074lYb73wsfPdS/c89PRDK7TV1E7f\n/+zed/fs1GfFUPfonY5+5Ytko/e/f1jx/nLN3VPzvU7uLz+8+ZFVfo5XX3DPamVfXe7+UrPq+8t5\nk6etcM/605wl96yfv+Ce9T+Tp6+LsjcYCxcsykN3TFuh7b7Rj2f8bx9bFpglyYTbnsiE255Y8XO8\nBYtz7+//siwwW+qxP83o0pphTWzoodkOSSYvtz2l0baCUsrppZSxpZSx06f7n1tn5i1ctFLbc88v\nytwFK7Y/t6Ajzz2/cKVjn5m3cttzz688ZquYu9zNd6nZHZ38jBctyrwXHPvcokUr9a9J5i5eecxW\n1tlv7PfbceXHDvTt3ytbbrvi7JMBu2zRZXVtqN70qjetsH349ofnmJ2PWaFt07ZN8w9D/iHbbrbt\nsrZN2jbJm1/ldxVY9+589OnVbvPSjH32udVu89I88fAzq91mzd017a7VbsMryXuiV1ZXvCeat3jD\nXl6C9dvpw07Ppm2bLtv+x6H/mMO2P2yFY7qVbjllz1MyYtCIZW1Dth6Stw5+a8593bl5/S6vz5Ct\nh+SDwz+Yd+39rnVVOhuRuQs6Vmp7tpP7y/LB2lKd3bPmLujIhr40z9qqta50f5m7aHGn95dnO7k/\nddbW2b2tlbV1K9m054qPou65eecz7Pts03Oltu123WLJFMDlbLODxzHTfBt6aFY6aVvpTlBrPa/W\n2l5rbe/fv/86KGvDM3jbPjl4162XbZeSvP2QnfKPL5jC/Y+H7Jy3H7JL2pb7ye+7Q9+cfuRu2Xrz\nv/7jsk/P7nnz8O27vO711Vu23Sp9u//1ptFvk+55/6ABGdbnr0FPW5LTtu+X07ZfcS2od+7QLyO3\n77fCX+5D+26evTY3/Xt5e716YHbau/F3tiRDj9g+Qw4fmP1eN2jZ/xm22bF3hv/NTvmbdw/NVgM3\nT5IM3L1vjjx1cJOqXn+9e59353Ov/lxet9Pr8k/7/VPOOeqc/M3Of5NPHPyJ7L7l7hnef3i+fcy3\ns/MWO+eiN16U9+773py656n50Rt/lCHbDGl2+bSgA3bearXbvDTtW2y+2m1emu1e1Xe126y5/Qbs\nt9pteCUN3rZPDnnBe6J/PHRn74nW0gvfE23zEt8TvXOHFd8THbbl5tlz85U/cINXyiEDD8kv3vKL\nfO7Vn8uFb7gwH23/aE7Y7YS8b9j7snXPrbPLFrvky0d+OYP6DMq3X/vtXHLCJbnwDRfm4hMuTu9N\ne2enLXbKOUedk0vfdGnet9/70q2ttdc0ZO28/ZCd0225G8ywHTu/v7zniF07/RzvhY9ifMehO6eU\nzj4+3fiVUnLaDi+8v2zT6Wdupw8akC26//Vj8iX3rP7Zb7l7VreSnLb9Nl1d9galW7e2HPrm3ZZ9\nDtete1sOffOrMvx1O6Us9/d4z4O3y/BjBmXQkMb79pIMfc322fPQgTn8rbune48l/7/cZVi/7Hv0\njuv6MmAlZUP+bYNSymFJzqq1vr6x/ckkqbX+x6r6tLe317Fjx66jCjcszz3fkYvvmJzJM+fmDfts\nl0N2W3IjuPqux3PHpJkZPmjLnDR8h7S1ldz52NO5+q7Hs90WPfP3h+yULXpukr/MmpeLb38sixbX\nnHLQoOy8TWt/4PbovOfzf1Nnpq0kbx+4TXbouWme7ViUHz0+I088vyAnDdgqB/bdPItrzeVPPp07\nn52bQ/punpO2XXIDGTNrTn4xfVZ26rlp3j5wm2ze3T+4OzNr2tx036Qtvbf66xvoZ2fMy/PPdaTf\noN4r/ONw0cLF6bbJhv67AkBiTbNXmjXNXlnWNHvlWNOMdW3ugo5cfPvkTH56bt6wz8BlH0h6T7R2\nHp33fH4ydWbakrx9+22y40t8T3TrsvdEPfIP22+dzbt5TwRs/P742NO5+q6p2a5vj/z9wTulzyru\n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\n1UpIO67WrgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "\u003cFigure size 3000x600 with 1 Axes\u003e"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "def do_plot(plot_df, palette):\n",
        "  plot_agg_df = plot_df.groupby(['Binder Target', 'target', 'Binder for']).sum().reset_index()\n",
        "  plt.figure(figsize=(30,6))\n",
        "  # plt.figure(figsize=(4.75, 2))  # Size for figure in paper.\n",
        "  g = sns.swarmplot(data=plot_agg_df, palette=palette,\n",
        "                    x='Binder Target', y='Count', hue='Binder for', dodge=True)\n",
        "  g.set_xticklabels(g.get_xticklabels(), rotation=90) \n",
        "  plt.show()\n",
        "\n",
        "\n",
        "do_plot(plot_df, palette={'SP6':'tab:purple',\n",
        "                          'SP9': 'tab:green',\n",
        "                          'SP4.1 (Neg. Ctrl)': 'tab:blue',\n",
        "                          'SP4.2 (Neg. Ctrl)': 'tab:cyan'})"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "UZu9m8wmLz_5"
      },
      "outputs": [],
      "source": [
        ""
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "last_runtime": {
        "build_target": "",
        "kind": "local"
      },
      "name": "BCS ProtSeq Single cycle dna dna.ipynb",
      "provenance": [
        {
          "file_id": "1k8UKySCRrNevNTXJ83-2uiVZoa1N4BYl",
          "timestamp": 1631739518321
        },
        {
          "file_id": "1fONwpc7if6IkMxFexvXvYkFqv1FB5NaG",
          "timestamp": 1631723212939
        },
        {
          "file_id": "1ZlC9Jz_Zaw5TCS7AuD_yxQDG4sQD9Jtd",
          "timestamp": 1631720954129
        }
      ]
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
